/**
 * @param {number[]} arr
 * @return {number}
 */
var maximumSum = function(arr) {
  let len = arr.length
  const dp1 = new Array(len).fill(0) // 以i结尾的最大值
  const dp2 = new Array(len).fill(0) // 以i开头的最大值
  dp1[0] = arr[0]
  dp2[len - 1] = arr[len - 1]
  for(let i = 1; i < len; i++) {
    dp1[i] = Math.max(dp1[i - 1] + arr[i], arr[i])
  }
  for(let j = len - 2; j >= 0; j--) {
    dp2[j] = Math.max(dp2[j + 1] + arr[j], arr[j])
  }
  // 删与不删
  let max = Math.max(dp2[0], dp2[1], dp1[len - 2], dp1[len - 1])
  for(let i = 1; i < len - 1; i++) {
    max = Math.max(dp1[ i - 1] + dp2[i + 1], dp1[i - 1], dp2[i + 1], max)
    max = Math.max(dp1[i], dp2[i], dp1[i] + dp2[j] - arr[i], max)
  }
  return max
};